package com.niuwa.p2p.dao.channel;


import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

import com.niuwa.p2p.dao.MyBatisDao;
import com.niuwa.p2p.entity.channel.Corporation;
import com.niuwa.p2p.vo.channel.ChannelAuditLogVo;
import com.niuwa.p2p.vo.channel.ChannelBasicInfoVo;
import com.niuwa.p2p.vo.channel.ChannelCustomerVo;

@MyBatisDao
public interface ChannelCustomerDao {

	/**
	 * 统计渠道客户个数 根据paramMap，统计出需要的渠道客户数 例：适用于分页的时候，选取当前页的渠道客户条数
	 * 
	 * @param paramMap
	 *            过滤得条件Map
	 * @return 总客户数
	 */
	public int count(Map<String, Object> paramMap);

	/**
	 * 选取渠道客户集合 根据paramMap，选取需要的渠道客户集合 例：适用于分页的时候，选取当前页的渠道客户集合
	 * 
	 * @param paramMap
	 *            过滤得条件Map
	 * @return List<User> 渠道客户集合
	 */
	public List<ChannelCustomerVo> selectChannelCustomerBySelective(
			Map<String, Object> paramMap);

	

	/**
	 * 统计渠道审核操作个数 根据paramMap，统计出需要的渠道审核操作数 例：适用于分页的时候，选取当前页的渠道审核操作条数
	 * 
	 * @param paramMap
	 *            过滤得条件Map
	 * @return 总渠道审核操作数
	 */
	public int countChannelAuditOperateByChannelCodeSelective(
			Map<String, Object> paramMap);

	/**
	 * 选取渠道审核操作集合 根据paramMap，选取需要的渠道审核操作集合 例：适用于分页的时候，选取当前页的渠道审核操作集合
	 * 
	 * @param paramMap
	 *            过滤得条件Map
	 * @return List<User> 渠道审核操作集合
	 */
	public List<ChannelAuditLogVo> selectChannelAuditOperateByChannelCodeSelective(
			Map<String, Object> paramMap);

	/**
	 * 通过渠道编码, 选取渠道基本信息集合
	 * @param channelCode 业务编号
	 * @return ChannelBasicInfoVo 渠道基本信息
	 */
	public ChannelBasicInfoVo selectChannelBasicInfoByChannelCode(String channelCode);
	
	/**
	 * 批准總額
	 * @return
	 */
	public BigDecimal selectAllApproveAmount();
	/**
	 * 可用總額
	 * @return
	 */
	public BigDecimal selectAllUseableAmount();
	/**
	 * 使用總額
	 * @return
	 */
	public BigDecimal selectAllUsedAmount();

	/**
	 * 统计渠道个数 (審核狀態為pass、forbidden)
	 * 
	 * @param paramMap
	 *            过滤得条件Map
	 * @return 总客户数
	 */
	public Integer countNoCondition();

	/**
	 * 选取渠道额度客户集合 根据paramMap，选取需要的渠道客户集合 例：适用于分页的时候，选取当前页的渠道客户集合
	 * 
	 * @param paramMap
	 *            过滤得条件Map
	 * @return List<User> 渠道客户集合
	 */
	public List<ChannelCustomerVo> selectChannelLimitByCondition(
			Map<String, Object> paramMap);
	
	List<Corporation> loadChannelInfo();
}
